package cn.shujuhai.cms.service.impl;

import cn.shujuhai.cms.domain.Group;
import cn.shujuhai.cms.domain.GroupRecipient;
import cn.shujuhai.cms.mapper.GroupMapper;
import cn.shujuhai.cms.service.GroupRecipientService;
import cn.shujuhai.cms.service.GroupService;
import cn.shujuhai.common.pluging.data.ResultCode;
import cn.shujuhai.common.pluging.data.ResultVo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;


/**
 * @author niuyahu
 * @description 针对表【group】的数据库操作Service实现
 * @createDate 2024-12-25 10:06:30
 */
@Service
@RequiredArgsConstructor
public class GroupServiceImpl extends ServiceImpl<GroupMapper, Group>
        implements GroupService {
    final GroupRecipientService groupRecipientService;

    /**
     * 分页查询系统收件人组信息
     *
     * @param groupName 收件人分组名（可为null，不为null时进行模糊查询）
     * @param page      当前页码（从1开始）
     * @param pageSize  每页显示的记录数
     * @return 返回包含分页信息和系统收件人分组列表的ResultVo对象，其中PageInfo<Group>包含了分页的详细信息，如总记录数、总页数等
     */
    @Override
    public ResultVo<PageInfo<Group>> getGroupPageInfo(String groupName, Integer page, Integer pageSize) {
        PageHelper.startPage(page, pageSize);
        QueryWrapper<Group> queryWrapper = new QueryWrapper<>();
        if (groupName != null && !groupName.isEmpty()) {
            queryWrapper.like("group_name", groupName);
        }
        List<Group> GroupList = this.list(queryWrapper.lambda().orderByDesc(Group::getId));  // 根据用户Id降序排序
        PageInfo<Group> GroupPageInfo = new PageInfo<>(GroupList);
        return ResultVo.success(GroupPageInfo);
    }

    /**
     * 新增收件人分组对象
     *
     * @param group 收件人分组对象
     * @return 新增成功或失败的响应状态
     */
    @Override
    public ResultVo<?> add(Group group) {
        if (!this.save(group)) {
            return ResultVo.failure(ResultCode.FAILED);
        }
        return ResultVo.success();
    }

    /**
     * 收件人分组编辑
     *
     * @param group 收件人分组对象
     * @return 更新的收件人分组对象
     */
    @Override
    public ResultVo<Group> edit(Group group) {
        if (!this.updateById(group)) {
            return ResultVo.failure(ResultCode.FAILED);
        }
        return ResultVo.success();
    }

    /**
     * 收件人分组删除
     *
     * @param id 收件人分组Id
     * @return 删除成功或失败的结果及响应信息
     */
    @Override
    public ResultVo<Group> removeId(Integer id) {
        this.groupRecipientService.remove(new QueryWrapper<GroupRecipient>().lambda().eq(GroupRecipient::getGroupId, id));
        if (!this.removeById(id)) {
            return ResultVo.failure(ResultCode.FAILED);
        }
        return ResultVo.success();
    }


}




